﻿using System;

/*
이 클래스의 목적은 웹 개발자가 서버에서 사용자별로 다른
표준 시간대를 사용하는 웹 응용 프로그램을 만들 수 있는
간편한 인터페이스를 제공하는 것입니다. 서버에 UTC가
적용되어 있지 않을 수도 있습니다.
*/
public static class Time {

    // 사용자의 표준 시간대
    public static string LocalTimeZoneId {
        get {
            var timeZone = RequestData.GetValue<string>("LocalTimeZone");
            if (timeZone == null) {
                throw new InvalidOperationException("요청 지역 표준 시간대가 설정되지 않았습니다.");
            }

            return timeZone;
        }
        set {
            // 잘못된 ID가 전달된 경우 InvalidOperationException이 throw됩니다.
            RequestData.SetValue("LocalTimeZone", value);
        }
    }

    public static DateTime NowInLocal {
        get {
            return UtcToLocal(DateTime.UtcNow);
        }
    }

    public static DateTime LocalToUtc(DateTime localTime) {
        return TimeZoneInfo.ConvertTimeToUtc(localTime, TimeZoneInfo.FindSystemTimeZoneById(LocalTimeZoneId));
    }

    public static DateTime UtcToLocal(DateTime utcTime) {
        return TimeZoneInfo.ConvertTimeFromUtc(utcTime, TimeZoneInfo.FindSystemTimeZoneById(LocalTimeZoneId));
    }
}